package safari.controller.admin;

import java.sql.SQLException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import safari.model.admin.AdminService;
import safari.model.common.ListVO;
import safari.model.member.MemberVO;

public class AdminController extends MultiActionController {
	private AdminService service;
	//AdminController 생성자
	public AdminController(AdminService service) {
		super();
		this.service = service;
	}

	/**
	 * getAllMember()
	 * 모든 회원을 조회하는 method
	 * return type : List<>
	 * ajax(Json View) 사용
	 */
	public ModelAndView getAllMember(HttpServletRequest request, HttpServletResponse response) throws SQLException{
		//전체 회원을 조회하는 메서드를 호출한 뒤 List<>타입으로 할당
		List<MemberVO> mList = service.getAllMember();
		System.out.println("[admin mode] AllMember : "+mList);
		//JsonView로 리스트 전송
		return new ModelAndView("JsonView","mList", mList);
	}
	/**
	 * 모든 관리자를 조회하는 method
	 */
	public ModelAndView getAllAdmin(HttpServletRequest request, HttpServletResponse response) throws SQLException{
		List<MemberVO> mList = service.getAllAdmin();
		System.out.println("[admin mode] AllAdmin : "+mList);
		return new ModelAndView("JsonView","mList", mList);
	}

/**
	 * findMemberById()
	 * 아이디로 회원을 검색하는 method
	 * return type : MemberVO
	 * ajax(Json View) 사용
	 */
	public ModelAndView findMemberById(HttpServletRequest request, HttpServletResponse response) throws SQLException{
		//id를 request
		String id = request.getParameter("adminId");
		//ID로 회원을 검색하는 method 호출 후 VO에 할당
		MemberVO mvo = service.findMemberById(id);
		//JsonView로 VO 전송
		return new ModelAndView("JsonView","mvo", mvo);
	}
	
	/**
	 * findMemberByName()
	 * 모든 회원을 조회하는 method
	 * return type : List<>
	 * ajax(Json View) 사용
	 */
	public ModelAndView findMemberByName(HttpServletRequest request, HttpServletResponse response) throws SQLException{
		//name을 request
		String name = request.getParameter("adminName");
		//name으로 회원을 검색하는 method 호출 후 List<>타입에 할당
		List<MemberVO> mList = service.findMemberByName(name);
		//JsonView로 VO 전송
		return new ModelAndView("JsonView","mList", mList);
	}
	
	/**
	 * 회원 검색을 목적으로 하는 페이지로 이동시켜주는 method
	 */
	public String moveToFind(HttpServletRequest request, HttpServletResponse response)throws SQLException{
		return  "admin/findMember";
	}
	
	/**
	 * 관리자 페이지로 이동시켜주는 method
	 * 관리자가 아닐 경우 에러 페이지로 이동
	 */
	public String moveToMain(HttpServletRequest request, HttpServletResponse response, HttpSession session)throws SQLException{
		String path="";
		//session 정보를 VO에 할당시킨뒤 
		MemberVO mvo = (MemberVO) session.getAttribute("userInfo");
		//VO에 담긴 정보 중 grade가 admin이 아니면
		if(mvo==null||!mvo.getGrade().equals("admin")){
			//notAdmin page로
			path="admin/notAdmin";
		}else{
			//admin이면 admin page의 main page로
			path="admin/main";
		}
		return  path;
	}
	
	/**
	 * findMemberByAddress()
	 * 모든 회원을 조회하는 method
	 * return type : List<>
	 * ajax(Json View) 사용
	 */
	public ModelAndView findMemberByAddress(HttpServletRequest request, HttpServletResponse response) throws SQLException{
		//address 를 request
		String address = request.getParameter("adminAddress");
		//address로 회원을 검색한 뒤 List<> 할당
		List<MemberVO> mList = service.findMemberByAddress(address);
		System.out.println("[admin mode] search address : "+mList);
		//JsonView로 List 전송
		return new ModelAndView("JsonView","mList", mList);
	}

	/**
	 * getAllTradedHistory()
	 * 모든 거래 내역을 보여주는 method
	 * return type : List<>
	 * admin_getAllHistroy.jsp로 이동하여 출력
	 */
	public ModelAndView getAllTradedHistory(HttpServletRequest request, HttpServletResponse response) throws SQLException{
		int page = Integer.parseInt(request.getParameter("page"));
		//모든 거래 내역을 가져오는 method 호출 후 List<>타입에 할당
		ListVO lvo = service.getAllTradedHistory(page);
		System.out.println("All History from page["+page+"]");
		//해당 페이지로 List 들고 이동
		return new ModelAndView("admin/getAllHistory","lvo", lvo);
	}
}
